package com.cskaoyan.controller.system;

import com.cskaoyan.bean.BasePageInfo;
import com.cskaoyan.bean.BaseRespVo;
import com.cskaoyan.bean.bo.sysytem.RolePermissionsPostBo;
import com.cskaoyan.bean.vo.system.*;
import com.cskaoyan.service.system.RoleService;
import com.cskaoyan.util.common.Constant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * @auther zk
 * @date 2022/7/16 16:45
 */
@RestController
@RequestMapping("admin/role")
public class RoleController {

    @Autowired
    RoleService roleService;

    /**
     * @auther zk
     * @description admin/role/list 根据分页信息获取操作日志列表
     * @param page:页数 limit:每页大小 sort:用于排序字的字段 order:排序规则
     * @return 角色信息分页列表
     */
    @RequestMapping("list")
    public BaseRespVo roleList(BasePageInfo info, String name) {
        RoleListVo roleListVo = roleService.roleList(info, name);
        return BaseRespVo.ok(roleListVo, "成功", 0);
    }

    /**
     * @auther zk
     * @description admin/role/create 插入一条角色信息，角色名不能重复
     * @param name:角色名 desc:角色说明
     * @return 插入的角色完整信息
     */
    @RequestMapping("create")
    public BaseRespVo roleCreate(@RequestBody Map map) {
        RoleCreateVo roleCreateVo = roleService.roleCreate((String) map.get("name"), (String) map.get("desc"));
        if (roleCreateVo == null) {
            return BaseRespVo.duplicatedParameter("角色已经存在");
        }
        return BaseRespVo.ok(roleCreateVo, "成功", 0);
    }

    /**
     * @auther zk
     * @description admin/role/update 修改一条角色信息，角色名不能重复
     * @param 包含角色信息的json
     * @return 修改状态的json
     */
    @RequestMapping("update")
    public BaseRespVo roleUpdate(@RequestBody Map map) {
        Integer flag = roleService.roleUpdate(map);
        if (flag == null) {
            return BaseRespVo.duplicatedParameter("角色已经存在");
        }
        return BaseRespVo.ok(null, "成功", 0);
    }

    /**
     * @auther zk
     * @description admin/role/permissions 根据角色id获取 所有权限列表 和 该角色被授予的权限
     * @param 角色id
     * @return 所有权限列表 和 该角色被授予的权限
     */
    @GetMapping("permissions")
    public BaseRespVo getRolePermissions(Integer roleId) {
        RolePermissions0GetVo rolePermissions0GetVo = roleService.getRolePermissions(roleId);
        return BaseRespVo.ok(rolePermissions0GetVo, "成功", 0);
    }

    /**
     * @auther zk
     * @description admin/role/permissions 根据角色id获取 所有权限列表 和 该角色被授予的权限
     * @param 角色id
     * @return 所有权限列表 和 该角色被授予的权限
     */
    @PostMapping("permissions")
    public BaseRespVo postRolePermissions(@RequestBody RolePermissionsPostBo bo) {
        Integer flag = roleService.postRolePermissions(bo);
        if (flag == 1) {
            return BaseRespVo.ok(null, "成功", 0);
        }else {
            return BaseRespVo.error(200, "插入失败");
        }
    }

    /**
     * @auther zk
     * @description admin/role/delete 逻辑删除角色，并逻辑删除相关的权限表
     * @param 要删除的角色json格式信息
     * @return 是否成功的json
     */
    @RequestMapping("delete")
    public BaseRespVo roleDelete(@RequestBody RoleInfo roleInfo) {
        int flag = roleService.roleDelete(roleInfo);
        if (flag == Constant.EXISTS_ERROR_CODE) {
            return BaseRespVo.error(Constant.EXISTS_ERROR_CODE, "当前角色存在管理员，不能删除");
        }
        return BaseRespVo.ok(null, "成功", 0);
    }

    /**
     * @auther zk
     * @description admin/role/options 获取所有可选的角色名称
     * @param
     * @return 角色信息分页列表
     */
    @RequestMapping("options")
    public BaseRespVo roleOptions() {
        RoleOptionsVo roleOptionsVo = roleService.roleOptions();
        return BaseRespVo.ok(roleOptionsVo, "成功", 0);
    }

}
